package com.greate.community.mapper;

import com.greate.community.entity.UserBehavior;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

@Mapper
public interface UserBehaviorMapper {

    /**
     * 添加用户行为记录
     * @param userBehavior 用户行为对象
     * @return 影响的行数
     */
    int insertUserBehavior(UserBehavior userBehavior);

    /**
     * 根据用户ID查询用户行为列表
     * @param userId 用户ID
     * @param offset 起始位置
     * @param limit 查询条数
     * @return 用户行为列表
     */
    List<UserBehavior> selectUserBehaviors(int userId, int offset, int limit);

    /**
     * 根据用户ID和实体类型查询用户行为
     * @param userId 用户ID
     * @param entityType 实体类型
     * @param offset 起始位置
     * @param limit 查询条数
     * @return 用户行为列表
     */
    List<UserBehavior> selectUserBehaviorsByEntityType(@Param("userId") int userId, 
                                                     @Param("entityType") int entityType,
                                                     @Param("offset") int offset, 
                                                     @Param("limit") int limit);
    
    /**
     * 查询用户的热门行为（按分数排序）
     * @param userId 用户ID
     * @param limit 查询条数
     * @return 用户热门行为列表
     */
    List<UserBehavior> selectHotUserBehaviors(int userId, int limit);
    
    /**
     * 查询特定时间段内的用户行为
     * @param userId 用户ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param offset 起始位置
     * @param limit 查询条数
     * @return 用户行为列表
     */
    List<UserBehavior> selectUserBehaviorsByTime(@Param("userId") int userId,
                                               @Param("startTime") Date startTime,
                                               @Param("endTime") Date endTime,
                                               @Param("offset") int offset,
                                               @Param("limit") int limit);
    
    /**
     * 更新用户行为分数
     * @param id 行为ID
     * @param score 分数
     * @return 影响的行数
     */
    int updateScore(int id, double score);
} 